#pragma once #include using namespace std; class vehicule{ protected: char* inventory_code; int delivery_date; char* copy_string(char const * const str) const; void destroy( char* TTBD); public: virtual vehicule* clone( ) const{return new vehicule(*this);}; vehicule(); vehicule(char const * const code, int date); vehicule(const vehicule& v):inventory_code(copy_string(v.inventory_code)), delivery_date(v.delivery_date){}; ~vehicule(); virtual void print() const {cout<inventory_code<<" "<delivery_date;}; char* key_inventory(){return this->inventory_code;}; }; class truck : public vehicule{ protected: int capacity; char* name; public: virtual vehicule* clone( ) const{return new truck(*this);}; truck():capacity(-1),name(NULL){}; truck(char const * const code, int date, char const * const n, int c) :vehicule(code, date),name(copy_string(n)),capacity(c){}; truck(const truck& tr):vehicule(tr),name(copy_string(tr.name)),capacity(tr.capacity){}; ~truck(){this->destroy(this->name);}; virtual void print() const{vehicule::print( );cout<<" "<name<<" "<capacity;}; }; class car : public vehicule{ char* name; int mileage; public: virtual vehicule* clone( ) const{return new car(*this);}; car():mileage(-1),name(NULL){}; car(char const * const code, int date, char const * const n, int mil) :vehicule(code, date), name(copy_string(n)), mileage(mil){}; car(const car& c):vehicule(c),name(copy_string(c.name)),mileage(c.mileage){}; ~car(){this->destroy(this->name);}; virtual void print() const {vehicule::print( );cout<<" "<name<<" "<mileage;}; };